package com.heqiang.spring;

import com.heqiang.spring.context.support.ClassXmlApplicationContext;
import com.heqiang.spring.core.io.XmlBeanDefinitionReader;
import com.heqiang.spring.factory.DefaultListableBeanFactory;
import com.heqiang.spring.service.TestService;
import com.heqiang.spring.service.common.MyBeanFactoryPostProcessor;
import com.heqiang.spring.service.common.MyBeanPostProcessor;

/**
 * 学习链接
 * https://mp.weixin.qq.com/s/sv0H1NAuO3s90HC6QpjP5g
 */
public class TestMain {


    /***
     * 使用应用上下文
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{

        String xml = "classpath:spring.xml";
        ClassXmlApplicationContext classXmlApplicationContext = new ClassXmlApplicationContext(xml);
        //钩子函数作用，当程序正常退出的时候，如果需要清理内存，回收资源的话，可以添加一个钩子函数，
        //用法：Runtime.getRuntime().addShutdownHook(Thread thread)
        //本质上是在jvm关闭时，执行一个线程
        classXmlApplicationContext.registerShutdownHok();

        TestService testService = classXmlApplicationContext.getBean("testService",TestService.class);
        String result = testService.queryInfo();
        //输出结果：测试结果：a,掌门教育,上海，
        //可以看出结果一样，用上下文显然更方便
        System.out.println("测试结果："+result);
    }

    public static void main1(String[] args) {
        System.out.println("程序开始执行");
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                System.out.println("执行钩子函数，在程序执行完成，jvm关闭前执行");
            }
        });
        System.out.println("程序执行完成");
    }




}
